package org.grapes.wine.api.client.method;

import java.io.IOException;
import java.util.Collection;
import java.util.EnumSet;
import java.util.Set;

import org.grapes.wine.api.client.exception.WineException;
import org.grapes.wine.api.client.param.ProfileField;
import org.grapes.wine.api.client.param.RestClientConfig;

public interface IRestClientMethods<T> {

	public static RestClientConfig grcc = new RestClientConfig();

	public T friendsAreFriends(Collection<Integer> userIds1,
			Collection<Integer> userIds2) throws WineException, IOException;

	public T friendsGetAppUsers() throws WineException, IOException;

	public T friendsGet() throws WineException, IOException;

	public T friendsGetFriends() throws WineException, IOException;

	public T usersGetInfo(Integer userId, EnumSet<ProfileField> fields)
			throws WineException, IOException;

	public T usersGetInfo(Collection<Integer> userIds,
			EnumSet<ProfileField> fields) throws WineException, IOException;

	public T usersGetInfo(Collection<Integer> userIds, Set<CharSequence> fields)
			throws WineException, IOException;

	public int usersGetLoggedInUser() throws WineException, IOException;

	public boolean usersIsAppAdded() throws WineException, IOException;

	public boolean usersIsAppAdded(Integer userId) throws WineException,
			IOException;

	public String authGetSession(String authToken) throws WineException,
			IOException;

	public T adminGetAllocation() throws WineException, IOException;
}
